<?php
header ("Content-Type:text/html;charset=utf8");
class MySQLPDO{
	/**
	*预处理方式执行SQL
	*@param $sql string 执行的SQL语句
	*@param $data array 数据数组
	*@param &$flag bool 是否执行成功
	*@return object PDOStatement
	*/
	public function execute($sql,$data,&$flag=true){
		$stmt=$this->db->prepare($sql);
		$flag=$stmt->execute($data);
		return $stmt;
	}
	private $dbConfig=array(
	'db'=>'mysql',//数据库
	'host'=>'localhost',//服务器名称
	'port'=>'3306',//端口号
	'pass'=>'0823',//数据库密码
	'charset'=>'utf8',//字符集
	'dbname'=>'hcit_msg',//默认数据库
	);
	//PDO实例
	private $db;
	//单例模式，本类对象使用
	private static $instance;
	/**
	*私有的构造方法
	*@param type @params
	*/
	private function __construct($params){
	    //初始化属性
		$this->dbConfig=array_merge($this->dbConfig,$params);
		//连接服务器
		$this->connect();
	}
	/**
	*获得单例对象
	*@param $params array 数据库连接信息
	*@return object 单例对象
	*/
	public static function getInstance($params=array()){
		if (!self::$instance instanceof self){
			self::$instance=new self ($params);
		}
		return self::$instance;//返回对象
	}
	/**
	*私有克隆
	*/
	private function __clone(){
	}
	/**
	*连接目标服务器
	*/
	private function connect(){
		try{
		$dsn ="{$this->dbConfig['db']}:host={$this->dbConfig['host']};"."port={$this->dbConfig['port']};dbname={$this->dbConfig['dbname']};"
	 	       ."charset={$this->dbConfig['charset']}";
	    //实例化PDO
		$this->db=new PDO ($dsn,$this->dbConfig['user'],$this->dbConfig['pass']);
		//设定字符集
		$this->db->query("set names {$this->dbConfig['charset']}");
		}catch (PDOException $e){
		//错误提示
		die("数据库操作连接失败:{$e->getMessage()}");
		}
	}
    /**
	*执行SQL语句
	*@param string $sql SQL语句
	*@return object PDOStatement
	*/
	public function query($sql){
		$rst=$this ->db->query($sql);
		if($rst===false){
			$error=$this ->db->errorInfo();
		//print_r($error);
		die("执行SQL语句失败：ERROR{$error[1]}($error[0]:{$error[2]}))");
	}
	return $rst;
	}
	/**
	*取得一行记录
	*@param $sql $string 执行SQL语句
	*@return array 关联数组结果
	*/
	public function fetchRow($sql,$data=array()){
		return $this->execute($sql,$data)->fetch(PDO::FETCH_ASSOC);//关联数组
	}
	/**
	*取得所有结果
	*@param string $sql 执行SQL语句
	*@return array 关联数组结果
	*/
	public function fetchAll($sql,$data=array()){
		return $this->execute($sql,$data)->fetchAll(PDO::FETCH_ASSOC);
	}	
} 
?>